﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Windows.Forms;
using System.Text.RegularExpressions;
using System.Net;
using System.Runtime.InteropServices;

namespace Jardin_Informativo_Agua_Tierra
{
    public partial class Validacion
    {
        [DllImport("wininet.dll")]
        private extern static bool InternetGetConnectedState(out int Description, int ReservedValue);

        JardinInformativoBDEntities BEDE = new JardinInformativoBDEntities();
        Generador g = new Generador();
        IEnumerable<Trabajador> ListaTrabajador;
        IEnumerable<Nivel> ListaNivel;
        IEnumerable<Parvulo> ListaParvulo;
        IEnumerable<Nivel> ListaNiveles;
        IEnumerable<Retiro> ListaRetiros;

        //================================================================================================================================================

        public int ValidarCombobox(string cbtext)
        {
            if (cbtext == "") { return 0; }
            else { return 1; }
        }

        //================================================================================================================================================

        public int ValidarRut(string rutt, string digito)
        {
            if (rutt == "" | digito == "") { return 0; }
            else
            {
                int a = ValidarNumeros(rutt);
                if (a == 1 && (digito == "0" | digito == "1" | digito == "2" | digito == "3" | digito == "4" | digito == "5" | digito == "6" | digito == "7" | digito == "8" | digito == "9" | digito == "K"))
                {
                    int rut = int.Parse(rutt);
                    int mult = 2;
                    int acumdig = 0;
                    while (rut != 0)
                    {
                        int mod = rut % 10;
                        rut = rut / 10;
                        acumdig = acumdig + (mod * mult);
                        mult++;
                        if (mult > 7)
                        {
                            mult = 2;
                        }
                    }
                    int div = acumdig % 11;
                    int dig = 11 - div;
                    if (digito == "0")
                    {
                        if (dig == 11) { return 1; }
                        else { return 0; }
                    }
                    else
                    {
                        if (digito == "K")
                        {
                            if (dig == 10) { return 1; }
                            else { return 0; }
                        }
                        else
                        {
                            if (digito == dig.ToString()) { return 1; }
                            else { return 0; }
                        }
                    }
                }
                else { return 0; }
            }
        }

        //=================================================================================================================================================

        public int ValidarTextos(string texto)
        {
            if (texto != "")
            {
                int sw = 1;
                foreach (char aux in texto.ToCharArray())
                {
                    int aux2 = (int)aux;
                    if (aux2 != 32)
                    {
                        if (aux2 != 209)
                        {
                            if (aux2 < 65 | aux2 > 90) // COMPRUEBA SI EL CARACTER ESTA ENTRE LA "A" Y LA "Z"
                            {
                                sw = sw * 0;
                            }
                            else { sw = sw * 1; }
                        }
                    }
                }
                return sw;
            }
            else { return 0; }

        }

        //=================================================================================================================================================

        public int ValidarDescripciones(string texto)
        {
            if (texto != "")
            {
                int contcomas = 0;
                int contespacios = 0;
                int contpuntos = 0;
                int contletras = 0;
                int sw = 1;
                foreach (char aux in texto.ToCharArray())
                {
                    int aux2 = (int)aux;
                    if (aux2 != 32 && aux2 != 44 && aux2 != 46)
                    {
                        if (aux2 != 209)
                        {
                            if (aux2 < 65 | aux2 > 90) // COMPRUEBA SI EL CARACTER ESTA ENTRE LA "A" Y LA "Z"
                            {
                                sw = sw * 0;
                            }
                            else { sw = sw * 1; contletras++; }
                        }
                    }
                    else { if (aux2 == 44) { contcomas++; } if (aux2 == 32) { contespacios++; } if (aux2 == 46) { contpuntos++; } }
                }
                if (contcomas > contespacios | contpuntos > contespacios | contpuntos > contletras | contespacios > contletras | contcomas > contletras | contespacios > contletras) { sw = sw * 0; }
                return sw;
            }
            else { return 0; }

        }

        //=================================================================================================================================================

        public int ValidarNumeros(string numero)
        {
            try
            {
                Convert.ToInt32(numero);
                if (Convert.ToInt32(numero) < 0) { return 0; }
                else
                {
                    return 1;
                }
            }
            catch { return 0; }
        }

        //=================================================================================================================================================

        public int ValidarFono(string fono)
        {
            int aux3 = 0;
            int aux = ValidarNumeros(fono); // el valor solo contiene numeros
            int aux2;
            if (fono.Length < 8) { aux2 = 0; } // el valor esta compuesto por 8 digitos
            else { aux2 = 1; }
            if (aux == 1 && aux2 == 1)
            {
                int a = int.Parse(fono);
                int b = a / 10000000;
                if (b == 9 | b == 8 | b == 7 | b == 2 | b == 6) { aux3 = 1; }
            }
            return aux * aux2 * aux3;

        }

        //=================================================================================================================================================

        public int BuscarEnGrid(string ValorBuscado, DataGridView grid)
        {
            if (grid.RowCount == 0)
            {
                return 0;
            }
            else
            {
                grid.ClearSelection();
                int i = 0;
                foreach (DataGridViewRow row in grid.Rows)
                {
                    foreach (DataGridViewCell cell in row.Cells)
                    {
                        try
                        {
                            if (cell.Value.ToString() == ValorBuscado)
                            {

                                grid.Rows[i].Selected = true;
                                grid.CurrentCell = grid.Rows[i].Cells[0];
                                return 1;
                            }
                        }
                        catch { }
                    }
                    i++;
                }
                return 0;
            }
        }

        //================================================================================================================================================

        public int ValidarMail(string email)
        {
            string expresion;
            expresion = "\\w+([-+.']\\w+)*@\\w+([-.]\\w+)*\\.\\w+([-.]\\w+)*";
            if (Regex.IsMatch(email, expresion))
            {
                if (Regex.Replace(email, expresion, string.Empty).Length == 0)
                {
                    return 1;
                }
                else
                {
                    return 0;
                }
            }
            else
            {
                return 0;
            }
        }

        //================================================================================================================================================

        public int ValidarContraseña(string pass)
        {
            if (pass.Length < 4)
            {
                return 0;
            }
            else
            {
                int sw = 1;
                foreach (char aux in pass.ToCharArray())
                {
                    int aux2 = (int)aux;
                    try
                    {
                        Convert.ToInt32(aux);
                        sw = sw * 1;
                    }
                    catch
                    {
                        if (aux2 < 65 | aux2 > 90) // COMPRUEBA SI EL CARACTER ESTA ENTRE LA "A" Y LA "Z"
                        {
                            sw = sw * 0;
                        }
                        else { sw = sw * 1; }
                    }
                }
                return sw;
            }
        }

        //================================================================================================================================================

        public int ComprobarTrabajador(string rut)
        {
            int b = int.Parse(rut);
            ListaTrabajador = BEDE.Trabajador.OrderBy(a => a.rut);
            foreach (Trabajador aux in ListaTrabajador)
            {
                if (aux.rut == b) { return 0; }
            }
            return 1;
        }

        //================================================================================================================================================

        public int ComprobarNivel(int cod)
        {
            ListaNivel = BEDE.Nivel.Where(a => a.año == DateTime.Now.Year);
            foreach (Nivel aux in ListaNivel)
            {
                if (aux.cod_nivel == cod) { return 0; }
            }
            return 1;
        }

        //================================================================================================================================================

        public int EliminarNivel(int codnivel)
        {
            ListaParvulo = BEDE.Parvulo.OrderBy(a => a.folio_ficha);
            foreach (Parvulo aux in ListaParvulo)
            {
                if (aux.cod_nivel == codnivel) { return 0; }
            }
            return 1;
        }

        //================================================================================================================================================

        public int ComprobarFichaParvulo(string rut)
        {
            int nroficha = g.GenCodFicha(rut);
            ListaParvulo = BEDE.Parvulo.OrderBy(c => c.folio_ficha);
            foreach (Parvulo aux in ListaParvulo)
            {
                if (aux.folio_ficha == nroficha) { return 1; }
            }
            return 0;
        }

        //================================================================================================================================================

        public int ComprobarEliminacionTrabajador(int rut)
        {
            ListaNiveles = BEDE.Nivel.OrderBy(c => c.cod_nivel);
            foreach (Nivel aux in ListaNiveles)
            {
                if (aux.rut_trabajador == rut) { return 0; }
            }
            return 1;
        }

        //================================================================================================================================================

        public int ComprobarRetirante(string rut)
        {
            try
            {
                int a = int.Parse(rut);
                Autorizado_Retiro aux = BEDE.Autorizado_Retiro.Single(c => c.rut == a);
                return 1;
            }
            catch { return 0; }
        }

        //================================================================================================================================================

        public int ComprobarRetiro(int idretiro)
        {
            try
            {
                Retiro aux = BEDE.Retiro.Single(c => c.id_retiro == idretiro);
                return 0; // si encuentro un registro de retiro con el mismo numero que el que ingreso, entonces no puedo registrar
            }
            catch
            {
                return 1; // no se encontro nada... puedo darle padelante... }
            }
        }

        //================================================================================================================================================

        public int ComprobarEliminacionRetirante(int rut)
        {
            ListaRetiros = BEDE.Retiro.Where(c => c.año == DateTime.Now.Year).OrderBy(c=>c.id_retiro);
            int a = 0;
            foreach(Retiro aux in ListaRetiros)
            {
                if (aux.rut_autorizado == rut) { a++; }
            }
            if (a > 1) { return 0; }
            else { return 1; }
        }

        //================================================================================================================================================

        public int ProbarConexion()
        {
            int inttemp;
            if (InternetGetConnectedState(out inttemp, 0))
            {
                try
                {
                    int a = 0;
                    ListaTrabajador = BEDE.Trabajador.OrderBy(c => c.rut);
                    foreach (Trabajador aux in ListaTrabajador)
                    {
                        a++;
                    }
                    ListaNiveles = BEDE.Nivel.OrderBy(c => c.cod_nivel);
                    foreach (Nivel aux in ListaNiveles)
                    {
                        a++;
                    }
                    ListaParvulo = BEDE.Parvulo.OrderBy(c => c.folio_ficha);
                    foreach (Parvulo aux in ListaParvulo)
                    {
                        a++;
                    }
                    return 2;
                }
                catch { return 1; }
            }
            else { return 0; }
        }
    }
}